1. MPC response overview

As of 23 March 2023, a total of 360,787 persons or 74,612 families have been reached by MPC interventions. A total of USD 10.9 million has been disbursed by 14 implementing agencies across 22 sub-districts.

Only beneficiaries who have received at least USD 100/family/month have been included.





2. Map of MPC beneficiaries and collective/reception centres



Data on cash response extracted from FSL earthquake tracker on March 17 2023. Data on collective centres extracted from March 15 2023.

A revised version of the map will be available for further reporting with the revised 4Ws that includes all available codes for temporary sites.



3. Geographic breakdown of beneficiaries

Coverage is highest in Afrin and Harim districts, which have been worst-hit by the earthquake.



The current distribution of beneficiaries appears to be aligned with the worst-hit districts: Harim and Afrin. The figures below only pertain to populations within the AOC of Northwest Syria and not representative of the entire district’s population.



When reviewing the district-level spread of casualties and totally- and partially-damaged houses, Harim and Afrin do stand out in terms of the magnitude of the damage. Notably, the share of damaged houses in Afrin is much higher than in Harim.

Following them, Jebel Saman and Jisr-ash-Shugur have the next most severe damage, although, as can be seen from the table below, their populations (within the area of control) are comparatively smaller.

Assessments are still ongoing and the CWG will update these tables when new data becomes available.



Although the earthquake damage is not as severe in A’zaz, Al Bab, Jarablus, Idleb and Jisr-ash-Shugur, a much higher proportion of needs in these areas remain unmet, given the low percentages of persons reached.

The establishment of subnational targets at the district and sub-district level, will go some way towards clarifying how resources should be allocated across the affected areas.



3.1 Breakdown by partner and district

Harim, by far and away has the highest concentration of partners (12), double that of the next highest district (Afrin).




3.2 Scatterplot of sub-districts

The plot below shows the total population of each sub-district on the x-axis (for the moment, all persons in these areas are assumed to be affected and are included in the PIN) and the number of beneficiaries on the y-axis.

The size of each point indicates the number of dead or wounded persons there per 100,000.



Overall, we see fair alignment between the magnitude of the needs (total population) and the number of beneficiaries – this is evidenced by the blue line showing a positive relationship.

However, we do note several mismatches – Dana seems to have received an outsized share of beneficiaries, especially when considering the casualty rate. And Kafr Takharim seems to have been allocated relatively fewer resources in comparison to the death toll there. The response in Dana may be explained by a number of variables outside the scope of the data collected by the earthquake response tracker, such as population movements. Did earthquake survivors displace to Dana with the knowledge that it was a well-served area, where a number of partners were already operational? The CWG will conduct more consultations with partners to understand such disparities.




4. Cash response actors and cash disbursed

In the scatterplot below, each point is a single cash working group partner. The x-axis indicates the number of beneficiaries reached per agency and the y-axis indicates the number of communities (admin4) reached.



USD 10.9 million has been distributed across 155 communities and 22 sub-districts in NW Syria.

The table below summarises the information in the scatterplot above in tabular form:




4.1 USD disbursed by partner

There is very good compliance with CWG standards on the transfer values of multipurpose cash interventions, as can be seen by the usd_per_fam column in the table below.



Below is a breakdown of beneficiaries and families reached by cash-based activities of all values, not just those that qualify as MPC.





5. CCCM site tracker – searchable table


Data from CCCM site tracker. Extracted 15 March 2023.


LS0tDQp0aXRsZTogIk5vcnRod2VzdCBTeXJpYSBDYXNoIFdvcmtpbmcgR3JvdXAgRWFydGhxdWFrZSBSZXNwb25zZSBCdWxsZXRpbiINCmRhdGU6ICAiMjMgTWFyY2ggMjAyMyINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICB0b2M6IHllcw0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogeWVzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIGNvbGxhcHNlZDogbm8NCmFsd2F5c19hbGxvd19odG1sOiB5ZXMNCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvPUZBTFNFfQ0KDQojVE9DOjpiZWZvcmUgew0KICBjb250ZW50OiAiIjsNCiAgZGlzcGxheTogYmxvY2s7DQogIGhlaWdodDogNzBweDsNCiAgbWFyZ2luOiAyZW0gMjBweCA0MHB4IDIwcHg7DQogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgiTldTLUNXRyBsb2dvLlBORyIpOw0KICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47DQogIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7DQogIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7DQp9DQpgYGANCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KICAgIGJvZHkgLm1haW4tY29udGFpbmVyIHsNCiAgICAgICAgbWF4LXdpZHRoOiAxMjgwcHg7DQogICAgfQ0KPC9zdHlsZT4NCmBgYA0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgZmlnLndpZHRoPTksIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZz1GQUxTRSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGx1YnJpZGF0ZSkNCmxpYnJhcnkoc3RyaW5naSkNCmxpYnJhcnkocGFuZGVyKQ0KbGlicmFyeShqYW5pdG9yKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzZikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShmbGV4dGFibGUpDQpsaWJyYXJ5KGdncmVwZWwpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KDQp0aGVtZV9zZXQodGhlbWVfbGlnaHQoKSkNCg0KIyBkaXNhYmxpbmcgc2NpZW50aWZpYyBub3RhdGlvbg0Kb3B0aW9ucyhzY2lwZW4gPSAxMDApDQoNCiMgcGFuZGVyIHRhYmxlcyBhbGwgaW4gb25lIHJvdw0KcGFuZGVyT3B0aW9ucygndGFibGUuc3BsaXQudGFibGUnLCBJbmYpDQoNCiMgcGFuZGVyIHRob3VzYW5kcyBzZXBhcmF0b3INCnBhbmRlck9wdGlvbnMoImJpZy5tYXJrIiwgIiwiKQ0KDQojIHJlcGxhY2UgDQpvcHRzIDwtIG9wdGlvbnMoa25pdHIua2FibGUuTkEgPSAiIikNCg0KYCVvdXQlYCA8LSBOZWdhdGUoYCVpbiVgKQ0KDQojIGZ1bmN0aW9uIGZvciB0cmFuc3Bvc2luZyBkZg0KdHJhbnNwb3NlX2RmIDwtIGZ1bmN0aW9uKGRmKSB7DQogIHRfZGYgPC0gZGF0YS50YWJsZTo6dHJhbnNwb3NlKGRmKQ0KICBjb2xuYW1lcyh0X2RmKSA8LSByb3duYW1lcyhkZikNCiAgcm93bmFtZXModF9kZikgPC0gY29sbmFtZXMoZGYpDQogIHRfZGYgPC0gdF9kZiAlPiUNCiAgICB0aWJibGU6OnJvd25hbWVzX3RvX2NvbHVtbiguZGF0YSA9IC4pICU+JQ0KICAgIHRpYmJsZTo6YXNfdGliYmxlKC4pDQogIHJldHVybih0X2RmKQ0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcw0Kc3VtX2JlbiA8LSBmdW5jdGlvbihkZiwgY29sdW1uX3Zhcil7DQogIA0KICBjb2x1bW5fdmFyIDwtIGVucXVvKGNvbHVtbl92YXIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIpICU+JSAjIG11c3QgYWRkIGJhbmctYmFuZw0KICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKG5ld19iZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogICAgYXJyYW5nZShkZXNjKGJlbmVmaWNpYXJpZXMpKQ0KICAgIA0KfQ0KDQojIGZ1bmN0aW9uIGJlbmVmaWNpYXJ5IHN1bW1hcmllcywgMiBncm91cGVkIHZhcmlhYmxlcw0Kc3VtX2JlbjIgPC0gZnVuY3Rpb24oZGYsIGNvbHVtbl92YXIxLCBjb2x1bW5fdmFyMil7DQogIA0KICBjb2x1bW5fdmFyMSA8LSBlbnF1byhjb2x1bW5fdmFyMSkNCiAgY29sdW1uX3ZhcjIgPC0gZW5xdW8oY29sdW1uX3ZhcjIpDQogIA0KICBkZiAlPiUNCiAgICBncm91cF9ieSghIWNvbHVtbl92YXIxLCAhIWNvbHVtbl92YXIyKSAlPiUgIyBtdXN0IGFkZCBiYW5nLWJhbmcNCiAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShuZXdfYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgLmdyb3VwcyA9ICJkcm9wIikNCiAgICANCn0NCg0KIyBzY2FsaW5nIGZ1bmN0aW9ucyANCnJhbmdlMDEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgpKS8obWF4KHgpLW1pbih4KSl9DQpyYW5nZV93bmEgPC0gZnVuY3Rpb24oeCl7KHgtbWluKHgsIG5hLnJtID0gVFJVRSkpLyhtYXgoeCwgbmEucm0gPSBUUlVFKS1taW4oeCwgbmEucm0gPSBUUlVFKSl9DQoNCiNtb2RlIGZ1bmN0aW9uIA0KbW9kZSA8LSBmdW5jdGlvbih4KSB7DQogIHV4IDwtIHVuaXF1ZSh4KQ0KICB1eFt3aGljaC5tYXgodGFidWxhdGUobWF0Y2goeCwgdXgpKSldDQp9DQoNCmBgYA0KDQpgYGB7ciBkYXRhfQ0KcGNvZGUzX3NoYXBlIDwtIA0KICBzZjo6c3RfcmVhZCgiLi9kYXRhL3N5cl9hZG1ibmRhX3VuY3NfdW5vY2hhXzIwMjAxMjE3L3N5cl9hZG1ibmRhX2FkbTNfdW5jc191bm9jaGFfMjAyMDEyMTcuc2hwIiwgDQogICAgICAgICAgcXVpZXQgPSBUUlVFKQ0KDQpsb2NhdGlvbnMgPC0gcmVhZF9leGNlbCgiLi9kYXRhL0xvY2F0aW9ucy54bHN4IikgJT4lIA0KICBjbGVhbl9uYW1lcygpDQoNCmZzbCA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvZnNsLmNzdiIpICU+JSANCiAgbXV0YXRlKHBhcnRuZXJfY29kZSA9IGlmZWxzZShpcy5uYShwYXJ0bmVyX2NvZGUpLCAidGVtcF8xIiwgcGFydG5lcl9jb2RlKSkNCg0Kc2l0ZXMgPC0gcmVhZF9jc3YoIi4vZGF0YS9mb3JfcmVwb3J0L3NpdGVzLmNzdiIpDQoNCnJlbW92ZV9zaXRlcyA8LSByZWFkX2NzdigiLi9kYXRhL2Zvcl9yZXBvcnQvc2l0ZXNfbG9jYXRpb25zX2ZzbC5jc3YiKSAlPiUNCiAgZmlsdGVyKCFpcy5uYShsb25naXR1ZGVfeCkgJiAhaXMubmEobGF0aXR1ZGVfeSkpICU+JSANCiAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlX3giLCAibGF0aXR1ZGVfeSIpLCBjcnMgPSA0MzI2KSAlPiUNCiAgc3RfdHJhbnNmb3JtKHN0X2NycyhwY29kZTNfc2hhcGUpKSAlPiUgDQogIG11dGF0ZShpbnRlcnNlY3Rpb24gPSBhcy5pbnRlZ2VyKHN0X2ludGVyc2VjdHMoZ2VvbWV0cnksIHBjb2RlM19zaGFwZSkpLCANCiAgICAgICAgIGFyZWEgPSBpZmVsc2UoaXMubmEoaW50ZXJzZWN0aW9uKSwgIiIsIHBjb2RlM19zaGFwZSRBRE0zX1BDT0RFW2ludGVyc2VjdGlvbl0pKSAlPiUNCiAgZmlsdGVyKGlzLm5hKGludGVyc2VjdGlvbikpIA0KDQpzaXRlc19sb2NhdGlvbnNfZnNsIDwtIHJlYWRfY3N2KCIuL2RhdGEvZm9yX3JlcG9ydC9zaXRlc19sb2NhdGlvbnNfZnNsLmNzdiIpICU+JSANCiAgYW50aV9qb2luKHJlbW92ZV9zaXRlcywgYnkgPSBjKCJzaXRlX25hbWUiKSkNCg0KbmFtZXNfZXEgPC0gYygNCiAgImRhdGUiLA0KICAiZ292ZXJub3JhdGUiLA0KICAiZGlzdHJpY3QiLA0KICAic3ViX2Rpc3RyaWN0IiwNCiAgImNvbW11bml0eSIsDQogICJhZG1pbjQiLA0KICAiY2FzdWFsdGllcyIsDQogICJpbmp1cmllcyIsDQogICJjb21wbGV0ZWx5X2Rlc3Ryb3llZF9ob3VzZXMiLA0KICAiZGFtYWdlZF91bmloYWJpdGFibGVfaG91c2VzIiwNCiAgInRlbXBvcmFyeV9hY2NvbW1vZGF0aW9uX2NlbnRyZXMiLA0KICAiaWRwc19pbl9hbGxfY2VudHJlcyIsDQogICJzY2hvb2xzX2FzX2FjY29tb2RhdGlvbl9jZW50cmVzIiwNCiAgImlkcHNfaW5fc2Nob29scyIsDQogICJ0ZW50c19uZWVkZWQiLA0KICAiYmxhbmtldHNfbWF0dHJlc3Nlc19uZWVkZWQiLA0KICAidGVtcG9yYXJ5X2FjY29tbW9kYXRpb25fY2VudHJlc19hdmFpbGFibGUiLCANCiAgImFjY2Vzc2libGVfY2l2aWxfZGVmZW5zZSIsDQogICJsYXRyaW5lc19hdmFpbGFibGUiLA0KICAibWVhbHNfbmVlZGVkX3Blcl9kYXkiLA0KICAibmVlZF9ibG9vZF9kb25hdGlvbnMiLA0KICAiaGVhbHRoX3NlcnZpY2VzX2F2YWlsYWJsZSIsDQogICJuZWNlc3NhcnlfbWVkaWNhbF9lcXVpcG1lbnQiLA0KICAicnViYmxlX3ZvbHVudGVlcnMiLA0KICAidGVsZWNvbXNfYXZhaWxhYmxlIiwNCiAgImVsZWN0cmljaXR5X2F2YWlsYWJsZSIsIA0KICAiaGVhdGluZ19mdWVsX25lZWRlZCINCikNCg0KZXEgPC0gcmVhZF9leGNlbCgiLi9kYXRhL3N5cmlhLWVhcnRocXVha2UtaW1wYWN0LTA1LW1hcmNoLTIwMjMueGxzeCIsDQogICAgICAgICAgICAgICAgIHNoZWV0ID0gIkRBVEFTRVQiKSAlPiUgDQogIHNldE5hbWVzKG5hbWVzX2VxKSAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjRwY29kZSwgYWRtaW4zcGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gYygiYWRtaW40IiA9ICJhZG1pbjRwY29kZSIpKQ0KDQoNCmhubyA8LSByZWFkX2V4Y2VsKCIuL2RhdGEvMjAyM0hOT19QaU5fU2V2ZXJpdHlfZGV0YWlsZWRBb0lfRk9SU0hBUkUgMTUwMzIwMjMueGxzeCIsIHNraXAgPSAxLCANCiAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkgJT4lDQogIGNsZWFuX25hbWVzKCkNCg0KbndfcGNvZGUzIDwtIGhubyAlPiUgDQogIGZpbHRlcihhb19jID09ICJOVyIpICU+JSANCiAgcHVsbChhZG1pbjNwY29kZSkNCg0KIyBud19wY29kZTMgJT4lIA0KIyAgIGFzX3RpYmJsZSgpICU+JSANCiMgICB3cml0ZV9jc3YoIm53X3Bjb2RlMy5jc3YiKQ0KYGBgDQoNCg0KDQo8YnI+PGJyPjxicj4NCg0KIyAxLiBNUEMgcmVzcG9uc2Ugb3ZlcnZpZXcNCg0KQXMgb2YgMjMgTWFyY2ggMjAyMywgYSB0b3RhbCBvZiBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7c3VtKC4kYmVuZWZpY2lhcmllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBwZXJzb25zIG9yIGByIGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIHtzdW0oLiRmYW1pbGllcyl9ICU+JSBmb3JtYXQoYmlnLm1hcmsgPSAiLCIpYCBmYW1pbGllcyBoYXZlIGJlZW4gcmVhY2hlZCBieSBNUEMgaW50ZXJ2ZW50aW9ucy4gDQpBIHRvdGFsIG9mIFVTRCBgciBwYXN0ZShmb3JtYXQocm91bmQoKGZzbCAlPiUgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgIHtzdW0oLiR1c2RfdG90YWwpfSkgLyAxMDAwMDAwLCAxKSwgdHJpbSA9IFRSVUUpLCAibWlsbGlvbiIpYCBoYXMgYmVlbiBkaXNidXJzZWQgYnkgYHIgZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgc3VtbWFyaXNlKG5fZGlzdGluY3QocGFydG5lcl9jb2RlKSkgJT4lIHB1bGwoKWAgaW1wbGVtZW50aW5nIGFnZW5jaWVzIGFjcm9zcyBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSBzdW1tYXJpc2Uobl9kaXN0aW5jdChhZG1pbjNwY29kZSkpICU+JSBwdWxsKClgIHN1Yi1kaXN0cmljdHMuIA0KDQpPbmx5IGJlbmVmaWNpYXJpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgYXQgbGVhc3QgVVNEIDEwMC9mYW1pbHkvbW9udGggaGF2ZSBiZWVuIGluY2x1ZGVkLg0KDQoNCjxicj4NCg0KYGBge3Igc3VtbWFyeSB0YWJsZX0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JQ0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKHBhcnRuZXJzID0gbl9kaXN0aW5jdChwYXJ0bmVyX2NvZGUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSksIA0KICAgICAgICAgICAgaG91c2Vob2xkcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxfdXNkID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSANCiAgICAgICAgICAgcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lDQogIGFkb3JuX3RvdGFscygicm93IiwsLCwgaG91c2Vob2xkcywgYmVuZWZpY2lhcmllcywgdG90YWxfdXNkLCBgJV9iZW5lZmljaWFyaWVzYCkgJT4lIA0KICBtdXRhdGUoYCVfYmVuZWZpY2lhcmllc2AgPSBpZmVsc2UoYCVfYmVuZWZpY2lhcmllc2AgPiA5OS45OCwgMTAwLCBgJV9iZW5lZmljaWFyaWVzYCkpICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCBkaXN0cmljdCwgY29tbXVuaXRpZXMsIHBhcnRuZXJzLCANCiAgICAgICAgIGhvdXNlaG9sZHMsIGJlbmVmaWNpYXJpZXMsIHRvdGFsX3VzZCwgYCVfYmVuZWZpY2lhcmllc2ApICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiMzYwLDc4NyBwZW9wbGUgcmVhY2hlZCwgVVNEIDEwLjkgbWlsbGlvbiBkaXNidXJzZWQsIDIzIE1hcmNoIDIwMjMiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDYsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYSIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiQmVuZWZpY2lhcnkgZmlndXJlcyBpbmNsdWRlIG9ubHkgcmVwb3J0ZWQgTVBDIHdpdGggYSBtaW5pbXVtIHRyYW5zZmVyIHZhbHVlIG9mIFVTRCAxMDAiKSkgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDgsIHBhcnQgPSAiaGVhZGVyIiwgcmVmX3N5bWJvbHMgPSAiYiIsICANCiAgICAgICAgICAgYXNfcGFyYWdyYXBoKCJBcyBwZXJjZW50YWdlIG9mIGFsbCBNUEMgYmVuZWZpY2lhcmllcyByZWFjaGVkIGluIE5XIFN5cmlhIikpIA0KDQogIA0KYGBgDQoNCjxicj48YnI+PGJyPg0KDQoNCiMgMi4gTWFwIG9mIE1QQyBiZW5lZmljaWFyaWVzIGFuZCBjb2xsZWN0aXZlL3JlY2VwdGlvbiBjZW50cmVzDQoNCg0KPGJyPg0KDQoNCmBgYHtyIHBsb3RseS1zaXRlc30NCg0Kc2l0ZV9tYXAgPC0gc2l0ZXNfbG9jYXRpb25zX2ZzbCAlPiUgDQogIGxlZnRfam9pbihsb2NhdGlvbnMgJT4lIHNlbGVjdChhZG1pbjNwY29kZSwgYWRtaW40cGNvZGUpLCANCiAgICAgICAgICAgIGJ5ID0gImFkbWluNHBjb2RlIikgJT4lDQogIHJpZ2h0X2pvaW4ocGNvZGUzX3NoYXBlLCANCiAgICAgICAgICAgICBieSA9IGMoImFkbWluM3Bjb2RlIiA9ICJBRE0zX1BDT0RFIikpICU+JSANCiAgZmlsdGVyKEFETTFfUENPREUgJWluJSBjKCJTWTAyIiwgIlNZMDciKSkgJT4lIA0KICBzdF9hc19zZigpICU+JSANCiAgbXV0YXRlKHR5cGUgPSBmY3RfcmVsZXZlbCh0eXBlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJSQy9JRFAiLCAiQmVuZWZpY2lhcmllcyIpKSkgJT4lIA0KICBnZ3Bsb3QoKSArIA0KICBnZW9tX3NmKHNpemUgPSAwLjEsIGNvbG91ciA9ICJncmV5NzAiKSArDQogIGdlb21fcG9pbnQoYWVzKHNpemUgPSBwZXJzb25zLCANCiAgICAgICAgICAgICAgICAgIGNvbG91ciA9IHR5cGUsDQogICAgICAgICAgICAgICAgICB4ID0gbG9uZ2l0dWRlX3gsIHkgPSBsYXRpdHVkZV95LA0KICAgICAgICAgICAgICAgICAgdGV4dCA9IHBhc3RlMCgic3ViX2Rpc3RyaWN0OiAiLCBzdWJfZGlzdHJpY3QsICJcbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXRlOiAiLCBzaXRlX25hbWUsICJcbiIsICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcnNvbnM6ICIsIHBlcnNvbnMsICJcbiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHlwZTogIiwgdHlwZSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb25feDogIiwgbG9uZ2l0dWRlX3gsICJcbiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxhdF95OiAiLCBsYXRpdHVkZV95KSksIA0KICAgICAgICAgICAgIHNoYXBlID0gMjEsIHN0cm9rZSA9IC4yDQogICAgICAgICAgICAgIyBBZGp1c3RpbmcgYWxwaGEgd29uJ3QgYWZmZWN0IGEgcGxvdGx5DQogICAgICAgICAgICAgKSArDQogIHNjYWxlX3NpemVfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKw0KICB0aGVtZV92b2lkKCkgKyANCiAgdGhlbWUocGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBjb2xvdXIgPSBOQSksIA0KICAgICAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLCANCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArDQogIGxhYnModGl0bGUgPSAiQ29sbGVjdGl2ZS9yZWNlcHRpb24gY2VudHJlcyBhbmQgTVBDIGJlbmVmaWNpYXJpZXMiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJJRFBzIGluIHJlZCwgYmVuZWZpY2lhcmllcyBpbiBibHVlLCBzaXplIHNob3dzIG51bWJlciBvZiBwZXJzb25zIikNCg0KZ2dwbG90bHkoc2l0ZV9tYXAsIHRvb2x0aXAgPSBjKCJ0ZXh0IikpICU+JSANCiAgcGxvdGx5OjpzdHlsZShob3Zlcm9uID0gInBvaW50IikgJT4lIA0KICBsYXlvdXQodGl0bGUgPSBsaXN0KHRleHQgPSBwYXN0ZTAoIkNvbGxlY3RpdmUgY2VudHJlcyBhbmQgY2FzaCByZXNwb25zZSBiZW5lZmljaWFyaWVzIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSURQcyBpbiByZWQsIGJlbmVmaWNpYXJpZXMgaW4gYmx1ZSwgc2l6ZSBzaG93cyBudW1iZXIgb2YgcGVyc29uczsgY2xpY2sgYW5kIGRyYWcgdG8gem9vbTsgbW91c2Ugb3ZlciBmb3IgZGV0YWlscyIpKSkgDQoNCiMgV2lsbCB0aGlzIHdvcms/IA0KIyAlPiUgcGFydGlhbF9idW5kbGUoKQ0KDQojIGdnc2F2ZSgic2l0ZV9tYXAucG5nIiwgZHBpID0gMzAwLCBoZWlnaHQgPSA4LjI3LCB3aWR0aCA9IDExLjY5LCB1bml0cyA9ICJpbiIpDQpgYGANCg0KPGJyPg0KDQpEYXRhIG9uIGNhc2ggcmVzcG9uc2UgZXh0cmFjdGVkIGZyb20gW0ZTTCBlYXJ0aHF1YWtlIHRyYWNrZXJdKGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFLR3F0LTNZRGgyazhxTkNrc09KQW5kUlBPNTZHcTZwR3M2ZXNFUXRJRkl3L2VkaXQjZ2lkPTE4OTA5ODExMTUpIG9uIE1hcmNoIDE3IDIwMjMuIERhdGEgb24gY29sbGVjdGl2ZSBjZW50cmVzIGV4dHJhY3RlZCBmcm9tIE1hcmNoIDE1IDIwMjMuIA0KDQpBIHJldmlzZWQgdmVyc2lvbiBvZiB0aGUgbWFwIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBmdXJ0aGVyIHJlcG9ydGluZyB3aXRoIHRoZSByZXZpc2VkIDRXcyB0aGF0IGluY2x1ZGVzIGFsbCBhdmFpbGFibGUgY29kZXMgZm9yIHRlbXBvcmFyeSBzaXRlcy4gDQoNCg0KPGJyPjxicj4NCg0KDQojIDMuIEdlb2dyYXBoaWMgYnJlYWtkb3duIG9mIGJlbmVmaWNpYXJpZXMNCg0KQ292ZXJhZ2UgaXMgaGlnaGVzdCBpbiBBZnJpbiBhbmQgSGFyaW0gZGlzdHJpY3RzLCB3aGljaCBoYXZlIGJlZW4gd29yc3QtaGl0IGJ5IHRoZSBlYXJ0aHF1YWtlLiANCg0KPGJyPg0KDQpgYGB7cn0NCmZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgbXV0YXRlKGdvdmVybm9yYXRlID0gaWZlbHNlKGdvdmVybm9yYXRlID09ICJpZGxlYiIsICJJZGxlYiIsIGdvdmVybm9yYXRlKSwNCiAgICAgICAgIGRpc3RyaWN0ID0gaWZlbHNlKGRpc3RyaWN0ID09ICJpZGxlYiIsICJJZGxlYiIsIGRpc3RyaWN0KSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVvcmRlcihkaXN0cmljdCwgYmVuZWZpY2lhcmllcyksIA0KICAgICAgICAgZ292ZXJub3JhdGUgPSBmY3RfcmVsZXZlbChnb3Zlcm5vcmF0ZSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoIklkbGliIiwgIkFsZXBwbyIpKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBiZW5lZmljaWFyaWVzLCB5ID0gZGlzdHJpY3QpKSArIA0KICBnZW9tX2NvbChhZXMoZmlsbCA9IGdvdmVybm9yYXRlKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKGJlbmVmaWNpYXJpZXMpKSwgDQogICAgICAgICAgICBoanVzdCA9ICJpbndhcmQiKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfZChiZWdpbiA9IC4zKSArIA0KICBsYWJzKHRpdGxlID0gIk1QQyBiZW5lZmljaWFyaWVzIGJ5IGRpc3RyaWN0IiwgDQogICAgICAgc3VidGl0bGUgPSAiYXMgb2YgMjMgTWFyY2ggMjAyMyIsIA0KICAgICAgIHkgPSAiIikgKyANCiAgc2NhbGVfeF9jb250aW51b3VzKGxhYmVscyA9IGNvbW1hKSArIA0KDQpobm8gJT4lIA0KICBmaWx0ZXIoYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUgPSBhZG1pbjFuYW1lX2VuLCBkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX3BvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBsZWZ0X2pvaW4oDQogICAgZnNsICU+JQ0KICAgICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICAgICAgbXV0YXRlKGdvdmVybm9yYXRlID0gaWZlbHNlKGdvdmVybm9yYXRlID09ICJpZGxlYiIsICJJZGxlYiIsIGdvdmVybm9yYXRlKSwNCiAgICAgICAgICAgICBkaXN0cmljdCA9IGlmZWxzZShkaXN0cmljdCA9PSAiaWRsZWIiLCAiSWRsZWIiLCBkaXN0cmljdCkpICU+JSANCiAgICAgIGdyb3VwX2J5KGRpc3RyaWN0KSAlPiUgDQogICAgICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAsICANCiAgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZW9yZGVyKGRpc3RyaWN0LCBiZW5lZmljaWFyaWVzKSwgDQogICAgICAgICBnb3Zlcm5vcmF0ZSA9IGZjdF9yZWxldmVsKGdvdmVybm9yYXRlLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYygiSWRsaWIiLCAiQWxlcHBvIikpLCANCiAgICAgICAgIHBjX3JlYWNoZWQgPSByb3VuZChiZW5lZmljaWFyaWVzIC8gdG90YWxfcG9wdWxhdGlvbiAqIDEwMCwgZGlnaXRzID0gMSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcGNfcmVhY2hlZCwgeSA9IGRpc3RyaWN0KSkgKw0KICBnZW9tX2NvbChhZXMoZmlsbCA9IGdvdmVybm9yYXRlKSkgKyANCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGNvbW1hKHBjX3JlYWNoZWQpKSwgDQogICAgICAgICAgICBoanVzdCA9ICJpbndhcmQiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19kKGJlZ2luID0gLjMpICsgDQogIGxhYnModGl0bGUgPSAiUGVyY2VudCBvZiBwb3B1bGF0aW9uIHJlYWNoZWQiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJhcyBvZiAyMyBNYXJjaCAyMDIzIiwgDQogICAgICAgeSA9ICIiLCANCiAgICAgICB4ID0gIiUgb2YgcG9wdWxhdGlvbiByZWFjaGVkIikgKw0KICANCiAgcGxvdF9sYXlvdXQoZ3VpZGVzID0gImNvbGxlY3QiKSAmIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikNCg0KDQpgYGANCg0KPGJyPg0KDQpUaGUgY3VycmVudCBkaXN0cmlidXRpb24gb2YgYmVuZWZpY2lhcmllcyBhcHBlYXJzIHRvIGJlIGFsaWduZWQgd2l0aCB0aGUgd29yc3QtaGl0IGRpc3RyaWN0czogSGFyaW0gYW5kIEFmcmluLiBUaGUgZmlndXJlcyBiZWxvdyBvbmx5IHBlcnRhaW4gdG8gcG9wdWxhdGlvbnMgd2l0aGluIHRoZSBBT0Mgb2YgTm9ydGh3ZXN0IFN5cmlhIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgb2YgdGhlIGVudGlyZSBkaXN0cmljdCdzIHBvcHVsYXRpb24uIA0KDQo8YnI+DQoNCg0KYGBge3J9DQplcSAlPiUgDQogIGZpbHRlcihhZG1pbjNwY29kZSAlaW4lIG53X3Bjb2RlMyAmIA0KICAgICAgICAgICBkaXN0cmljdCAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZShjYXN1YWx0aWVzID0gc3VtKGNhc3VhbHRpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgaW5qdXJpZXMgPSBzdW0oaW5qdXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgdG90YWxseV9kYW1hZ2VkID0gc3VtKGNvbXBsZXRlbHlfZGVzdHJveWVkX2hvdXNlcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBwYXJ0aWFsbHlfZGFtYWdlZCA9IHN1bShkYW1hZ2VkX3VuaWhhYml0YWJsZV9ob3VzZXMsIG5hLnJtID0gVFJVRSkpICU+JQ0KICAjIFdoZXJlIGlzIEFyaWhhLCBhbmQgd2h5IGlzIGl0IHNob3dpbmcgdXAgaGVyZQ0KICBmaWx0ZXIoZGlzdHJpY3QgIT0gIkFyaWhhIikgJT4lIA0KICBsZWZ0X2pvaW4oaG5vICU+JSANCiAgICAgICAgICAgICAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYNCiAgICAgICAgICAgICAgICAgICAgICAgYWRtaW4ybmFtZV9lbiAlaW4lIGMoIkhhcmltIiwgIklkbGViIiwgIkppc3ItQXNoLVNodWd1ciIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQWZyaW4iLCAiSmViZWwgU2FtYW4iLCAiQSd6YXoiLCAiSmFyYWJsdXMiLCAiQWwgQmFiIikpICU+JQ0KICAgICAgICAgICAgICBncm91cF9ieShkaXN0cmljdCA9IGFkbWluMm5hbWVfZW4pICU+JQ0KICAgICAgICAgICAgICBzdW1tYXJpc2UocG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSwgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWQgPSBjYXN1YWx0aWVzICsgaW5qdXJpZXMsIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSB0b3RhbGx5X2RhbWFnZWQgKyBwYXJ0aWFsbHlfZGFtYWdlZCwgDQogICAgICAgICB3b3VuZGVkX2RlYWRfMTAwayA9IHJvdW5kKHdvdW5kZWRfZGVhZCAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzXzEwMGsgPSByb3VuZChkYW1hZ2VkX2hvdXNlcyAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogIHNlbGVjdChnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIHdvdW5kZWRfZGVhZCwgd291bmRlZF9kZWFkXzEwMGssIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXMsIGRhbWFnZWRfaG91c2VzXzEwMGspICU+JSANCiAgZmxleHRhYmxlKCkgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC45OSkgJT4lIA0KICBzZXRfY2FwdGlvbigiQ2FzdWFsdGllcyBhbmQgZGFtYWdlZCBob3VzZXMsIGFic29sdXRlIGZpZ3VyZXMgYW5kIHBlciAxMDAsMDAwIHBlcnNvbnMiKSAlPiUgDQogIGZvb3Rub3RlKGkgPSAxLCBqID0gMzo2LCBwYXJ0ID0gImhlYWRlciIsDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiRGF0YSBmcm9tIHRoZSBBc3Npc3RhbmNlIENvb3JkaW5hdGlvbiBVbml0LCBTeXJpYSAyMDIzMDMwNyIpKQ0KDQoNCmBgYA0KDQo8YnI+DQoNCldoZW4gcmV2aWV3aW5nIHRoZSBkaXN0cmljdC1sZXZlbCBzcHJlYWQgb2YgY2FzdWFsdGllcyBhbmQgdG90YWxseS0gYW5kIHBhcnRpYWxseS1kYW1hZ2VkIGhvdXNlcywgSGFyaW0gYW5kIEFmcmluIGRvIHN0YW5kIG91dCBpbiB0ZXJtcyBvZiB0aGUgbWFnbml0dWRlIG9mIHRoZSBkYW1hZ2UuIE5vdGFibHksIHRoZSBzaGFyZSBvZiBkYW1hZ2VkIGhvdXNlcyBpbiBBZnJpbiBpcyBtdWNoIGhpZ2hlciB0aGFuIGluIEhhcmltLiANCg0KRm9sbG93aW5nIHRoZW0sIEplYmVsIFNhbWFuIGFuZCBKaXNyLWFzaC1TaHVndXIgaGF2ZSB0aGUgbmV4dCBtb3N0IHNldmVyZSBkYW1hZ2UsIGFsdGhvdWdoLCBhcyBjYW4gYmUgc2VlbiBmcm9tIHRoZSB0YWJsZSBiZWxvdywgdGhlaXIgcG9wdWxhdGlvbnMgKHdpdGhpbiB0aGUgYXJlYSBvZiBjb250cm9sKSBhcmUgY29tcGFyYXRpdmVseSBzbWFsbGVyLiANCg0KQXNzZXNzbWVudHMgYXJlIHN0aWxsIG9uZ29pbmcgYW5kIHRoZSBDV0cgd2lsbCB1cGRhdGUgdGhlc2UgdGFibGVzIHdoZW4gbmV3IGRhdGEgYmVjb21lcyBhdmFpbGFibGUuIA0KDQo8YnI+DQoNCg0KYGBge3J9DQoNCmhubyAlPiUgDQogIGZpbHRlcihhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSAmDQogICAgICAgICAgIGFvX2MgPT0gIk5XIikgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSA9IGFkbWluMW5hbWVfZW4sIGRpc3RyaWN0ID0gYWRtaW4ybmFtZV9lbikgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfcG9wdWxhdGlvbiA9IHN1bSh0b3RhbF9wb3B1bGF0aW9uLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIGxlZnRfam9pbigNCiAgICBmc2wgJT4lDQogICAgICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogICAgICBtdXRhdGUoZ292ZXJub3JhdGUgPSBpZmVsc2UoZ292ZXJub3JhdGUgPT0gImlkbGViIiwgIklkbGViIiwgZ292ZXJub3JhdGUpLA0KICAgICAgICAgICAgIGRpc3RyaWN0ID0gaWZlbHNlKGRpc3RyaWN0ID09ICJpZGxlYiIsICJJZGxlYiIsIGRpc3RyaWN0KSkgJT4lIA0KICAgICAgZ3JvdXBfYnkoZGlzdHJpY3QpICU+JSANCiAgICAgIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSksIA0KICAgICAgICAgICAgICAgIHBhcnRuZXJzID0gbl9kaXN0aW5jdChwYXJ0bmVyX2NvZGUpKSAsICANCiAgYnkgPSAiZGlzdHJpY3QiKSAlPiUgDQogIG11dGF0ZShgJV9yZWFjaGVkYCA9IHJvdW5kKGJlbmVmaWNpYXJpZXMgLyB0b3RhbF9wb3B1bGF0aW9uICogMTAwLCBkaWdpdHMgPSAyKSkgJT4lIA0KICByZWxvY2F0ZShwYXJ0bmVycywgLmFmdGVyID0gbGFzdF9jb2woKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfdGFibGVfcHJvcGVydGllcyhsYXlvdXQgPSAiYXV0b2ZpdCIsIHdpZHRoID0gLjgpICU+JSANCiAgc2V0X2NhcHRpb24oIlBlcmNlbnRhZ2Ugb2YgcG9wdWxhdGlvbiByZWFjaGVkIGJ5IGRpc3RyaWN0IikgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDMsIHBhcnQgPSAiaGVhZGVyIiwgDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiVG90YWwgcG9wdWxhdGlvbiBvZiBzdWItZGlzdHJpY3RzIHdpdGhpbiB0aGUgTlcgQU9DLCBwZXJzb25zIG5vdCByZXNpZGluZyBpbiB0aGUgTlcgQU9DIGhhdmUgYmVlbiBleGNsdWRlZCBmcm9tIHRoaXMgdG90YWwiKSkNCmBgYA0KDQo8YnI+DQoNCkFsdGhvdWdoIHRoZSBlYXJ0aHF1YWtlIGRhbWFnZSBpcyBub3QgYXMgc2V2ZXJlIGluIEEnemF6LCBBbCBCYWIsIEphcmFibHVzLCBJZGxlYiBhbmQgSmlzci1hc2gtU2h1Z3VyLCBhIG11Y2ggaGlnaGVyIHByb3BvcnRpb24gb2YgbmVlZHMgaW4gdGhlc2UgYXJlYXMgcmVtYWluIHVubWV0LCBnaXZlbiB0aGUgbG93IHBlcmNlbnRhZ2VzIG9mIHBlcnNvbnMgcmVhY2hlZC4gDQoNClRoZSBlc3RhYmxpc2htZW50IG9mIHN1Ym5hdGlvbmFsIHRhcmdldHMgYXQgdGhlIGRpc3RyaWN0IGFuZCBzdWItZGlzdHJpY3QgbGV2ZWwsIHdpbGwgZ28gc29tZSB3YXkgdG93YXJkcyBjbGFyaWZ5aW5nIGhvdyByZXNvdXJjZXMgc2hvdWxkIGJlIGFsbG9jYXRlZCBhY3Jvc3MgdGhlIGFmZmVjdGVkIGFyZWFzLiANCg0KDQo8YnI+PGJyPg0KDQojIyAzLjEgQnJlYWtkb3duIGJ5IHBhcnRuZXIgYW5kIGRpc3RyaWN0DQoNCkhhcmltLCBieSBmYXIgYW5kIGF3YXkgaGFzIHRoZSBoaWdoZXN0IGNvbmNlbnRyYXRpb24gb2YgcGFydG5lcnMgKDEyKSwgZG91YmxlIHRoYXQgb2YgdGhlIG5leHQgaGlnaGVzdCBkaXN0cmljdCAoQWZyaW4pLiANCg0KPGJyPg0KDQpgYGB7cn0NCg0KDQpzdGFja190ZXh0IDwtIGZzbCAlPiUgDQogIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSANCiAgZ3JvdXBfYnkoZ292ZXJub3JhdGUsIGRpc3RyaWN0KSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbCA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpKSAlPiUgDQogIG11dGF0ZShkaXN0cmljdCA9IGZjdF9yZWxldmVsKGRpc3RyaWN0LCBjKCJIYXJpbSIsICJJZGxlYiIsICJKaXNyLUFzaC1TaHVndXIiLCANCiAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSkNCg0Kc3RhY2sgPC0gZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShkaXN0cmljdCwgcGFydG5lcl9jb2RlKSAlPiUgDQogIHN1bW1hcmlzZShiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgdW5ncm91cCgpICU+JQ0KICBtdXRhdGUoZGlzdHJpY3QgPSBmY3RfcmVsZXZlbChkaXN0cmljdCwgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFmcmluIiwgIkplYmVsIFNhbWFuIiwgIkEnemF6IiwgIkphcmFibHVzIiwgIkFsIEJhYiIpKSwgDQogICAgICAgICBkaXN0cmljdCA9IGZjdF9yZXYoZGlzdHJpY3QpKSAlPiUNCiAgZ2dwbG90KGFlcyh5ID0gZGlzdHJpY3QsIA0KICAgICAgICAgICAgIHggPSBiZW5lZmljaWFyaWVzKSkgKw0KICBnZW9tX2NvbChhZXMoZmlsbCA9IHBhcnRuZXJfY29kZSkpICsgDQogIGdlb21fdGV4dChkYXRhID0gc3RhY2tfdGV4dCwgDQogICAgICAgICAgICBhZXMoeCA9IHRvdGFsICsgNjAwMCwgDQogICAgICAgICAgICAgICAgbGFiZWwgPSBzY2FsZXM6OmNvbW1hKHRvdGFsKSkpICsgDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKyANCiAgbGFicyh5ID0gIiIsIA0KICAgICAgIHggPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHRpdGxlID0gIlBhcnRuZXIgYWNoaWV2ZW1lbnRzIGJ5IGRpc3RyaWN0LCAyMDIzMDMxNyIpICsgDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikNCg0KZ2dwbG90bHkoc3RhY2ssIHRvb2x0aXAgPSBjKCJmaWxsIiwgIngiLCAieSIpKSAlPiUgDQogIGxheW91dCh0aXRsZSA9IGxpc3QodGV4dCA9IHBhc3RlMCgiUGFydG5lciBhY2hpZXZlbWVudHMgYnkgZGlzdHJpY3QsIDIwMjMwMzE3IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGJyPiIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxzdXA+IiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTW91c2Ugb3ZlciBmb3IgZGV0YWlscyIpKSkNCg0KYGBgDQoNCjxicj48YnI+DQoNCiMjIDMuMiBTY2F0dGVycGxvdCBvZiBzdWItZGlzdHJpY3RzIA0KDQpUaGUgcGxvdCBiZWxvdyBzaG93cyB0aGUgdG90YWwgcG9wdWxhdGlvbiBvZiBlYWNoIHN1Yi1kaXN0cmljdCBvbiB0aGUgeC1heGlzIChmb3IgdGhlIG1vbWVudCwgYWxsIHBlcnNvbnMgaW4gdGhlc2UgYXJlYXMgYXJlIGFzc3VtZWQgdG8gYmUgYWZmZWN0ZWQgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgUElOKSBhbmQgdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIG9uIHRoZSB5LWF4aXMuIA0KDQpUaGUgc2l6ZSBvZiBlYWNoIHBvaW50IGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRlYWQgb3Igd291bmRlZCBwZXJzb25zIHRoZXJlIHBlciAxMDAsMDAwLiANCg0KPGJyPg0KDQoNCmBgYHtyLCBkcGkgPSAzMDAsIGZpZy5oZWlnaHQ9Nn0NCmVxICU+JSANCiAgZmlsdGVyKGFkbWluM3Bjb2RlICVpbiUgbndfcGNvZGUzICYgDQogICAgICAgICAgIGRpc3RyaWN0ICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lIA0KICBncm91cF9ieShnb3Zlcm5vcmF0ZSwgZGlzdHJpY3QsIHN1Yl9kaXN0cmljdCwgYWRtaW4zcGNvZGUpICU+JSANCiAgc3VtbWFyaXNlKGNhc3VhbHRpZXMgPSBzdW0oY2FzdWFsdGllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBpbmp1cmllcyA9IHN1bShpbmp1cmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICB0b3RhbGx5X2RhbWFnZWQgPSBzdW0oY29tcGxldGVseV9kZXN0cm95ZWRfaG91c2VzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHBhcnRpYWxseV9kYW1hZ2VkID0gc3VtKGRhbWFnZWRfdW5paGFiaXRhYmxlX2hvdXNlcywgbmEucm0gPSBUUlVFKSkgJT4lDQogICMgV2hlcmUgaXMgQXJpaGEsIGFuZCB3aHkgaXMgaXQgc2hvd2luZyB1cCBoZXJlDQogIGZpbHRlcihkaXN0cmljdCAhPSAiQXJpaGEiKSAlPiUgDQogIGxlZnRfam9pbihobm8gJT4lIA0KICAgICAgICAgICAgICBmaWx0ZXIoYWRtaW4zcGNvZGUgJWluJSBud19wY29kZTMgJg0KICAgICAgICAgICAgICAgICAgICAgICBhZG1pbjJuYW1lX2VuICVpbiUgYygiSGFyaW0iLCAiSWRsZWIiLCAiSmlzci1Bc2gtU2h1Z3VyIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZnJpbiIsICJKZWJlbCBTYW1hbiIsICJBJ3pheiIsICJKYXJhYmx1cyIsICJBbCBCYWIiKSkgJT4lDQogICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUNCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcHVsYXRpb24gPSBzdW0odG90YWxfcG9wdWxhdGlvbiwgbmEucm0gPSBUUlVFKSksIA0KICAgICAgICAgICAgYnkgPSAiYWRtaW4zcGNvZGUiKSAlPiUgDQogIG11dGF0ZSh3b3VuZGVkX2RlYWQgPSBjYXN1YWx0aWVzICsgaW5qdXJpZXMsIA0KICAgICAgICAgZGFtYWdlZF9ob3VzZXMgPSB0b3RhbGx5X2RhbWFnZWQgKyBwYXJ0aWFsbHlfZGFtYWdlZCwgDQogICAgICAgICB3b3VuZGVkX2RlYWRfMTAwayA9IHJvdW5kKHdvdW5kZWRfZGVhZCAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpLCANCiAgICAgICAgIGRhbWFnZWRfaG91c2VzXzEwMGsgPSByb3VuZChkYW1hZ2VkX2hvdXNlcyAvIHBvcHVsYXRpb24gKiAxMDAwMDAsIGRpZ2l0cyA9IDIpKSAlPiUgDQogICAgbGVmdF9qb2luKGZzbCAlPiUgDQogICAgICAgICAgICAgICAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICAgICAgICAgICAgICAgIGdyb3VwX2J5KGFkbWluM3Bjb2RlKSAlPiUgDQogICAgICAgICAgICAgICAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSksIA0KICAgICAgICAgICAgICBieSA9ICJhZG1pbjNwY29kZSIpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gcG9wdWxhdGlvbiwgeSA9IGJlbmVmaWNpYXJpZXMpKSArIA0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gd291bmRlZF9kZWFkXzEwMGspKSArIA0KICBnZW9tX3RleHRfcmVwZWwoYWVzKGxhYmVsID0gc3ViX2Rpc3RyaWN0KSwNCiAgICAgICAgICAgICAgICAgICBwb2ludC5wYWRkaW5nID0gLjUsIA0KICAgICAgICAgICAgICAgICAgIHNlZ21lbnQuY29sb3IgPSAiZ3JleTUwIiwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeF9sb2cxMChicmVha3MgPSBjKDAsIDMwMDAsIDEwMDAwLCAzMDAwMCwgMTAwMDAwLCAzMDAwMDAsIDEwMDAwMDApLCANCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfeV9sb2cxMChicmVha3MgPSBjKDAsIDEwMDAsIDMwMDAsIDEwMDAwLCAzMDAwMCwgMTAwMDAwKSwNCiAgICAgICAgICAgICAgICBsYWJlbHMgPSBjb21tYSkgKyANCiAgc2NhbGVfc2l6ZShicmVha3MgPSBjKDAsIDEwMCwgNTAwLCAxMDAwLCAzMDAwKSkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBjb2xvdXIgPSAiYmx1ZSIsIHNpemUgPSAuNSkgKw0KICBsYWJzKHRpdGxlID0gIlBvcHVsYXRpb24gYW5kIE1QQyBiZW5lZmljaWFyaWVzIGJ5IHN1Yi1kaXN0cmljdCIsDQogICAgICAgc3VidGl0bGUgPSAiU2l6ZSBpbmRpY2F0ZXMgZGVhZC93b3VuZGVkIHBlciAxMDAsMDAwMCIsIA0KICAgICAgIHggPSAiUG9wdWxhdGlvbiIsIA0KICAgICAgIHkgPSAiQmVuZWZpY2lhcmllcyIsIA0KICAgICAgIHNpemUgPSAiRGVhZC93b3VuZGVkXG5wZXIgMTAwayIsIA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIEFzc2lzdGFuY2UgQ29vcmRpbmF0aW9uIFVuaXQgYW5kIEZvb2QgU2VjdXJpdHkgYW5kIExpdmVsaWhvb2RzIENsdXN0ZXIiKSArDQogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCmBgYA0KDQo8YnI+DQoNCk92ZXJhbGwsIHdlIHNlZSBmYWlyIGFsaWdubWVudCBiZXR3ZWVuIHRoZSBtYWduaXR1ZGUgb2YgdGhlIG5lZWRzICh0b3RhbCBwb3B1bGF0aW9uKSBhbmQgdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIC0tIHRoaXMgaXMgZXZpZGVuY2VkIGJ5IHRoZSBibHVlIGxpbmUgc2hvd2luZyBhIHBvc2l0aXZlIHJlbGF0aW9uc2hpcC4gDQoNCkhvd2V2ZXIsIHdlIGRvIG5vdGUgc2V2ZXJhbCBtaXNtYXRjaGVzIC0tIERhbmEgc2VlbXMgdG8gaGF2ZSByZWNlaXZlZCBhbiBvdXRzaXplZCBzaGFyZSBvZiBiZW5lZmljaWFyaWVzLCBlc3BlY2lhbGx5IHdoZW4gY29uc2lkZXJpbmcgdGhlIGNhc3VhbHR5IHJhdGUuIEFuZCBLYWZyIFRha2hhcmltIHNlZW1zIHRvIGhhdmUgYmVlbiBhbGxvY2F0ZWQgcmVsYXRpdmVseSBmZXdlciByZXNvdXJjZXMgaW4gY29tcGFyaXNvbiB0byB0aGUgZGVhdGggdG9sbCB0aGVyZS4gVGhlIHJlc3BvbnNlIGluIERhbmEgbWF5IGJlIGV4cGxhaW5lZCBieSBhIG51bWJlciBvZiB2YXJpYWJsZXMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIGRhdGEgY29sbGVjdGVkIGJ5IHRoZSBlYXJ0aHF1YWtlIHJlc3BvbnNlIHRyYWNrZXIsIHN1Y2ggYXMgcG9wdWxhdGlvbiBtb3ZlbWVudHMuIERpZCBlYXJ0aHF1YWtlIHN1cnZpdm9ycyBkaXNwbGFjZSB0byBEYW5hIHdpdGggdGhlIGtub3dsZWRnZSB0aGF0IGl0IHdhcyBhIHdlbGwtc2VydmVkIGFyZWEsIHdoZXJlIGEgbnVtYmVyIG9mIHBhcnRuZXJzIHdlcmUgYWxyZWFkeSBvcGVyYXRpb25hbD8gVGhlIENXRyB3aWxsIGNvbmR1Y3QgbW9yZSBjb25zdWx0YXRpb25zIHdpdGggcGFydG5lcnMgdG8gdW5kZXJzdGFuZCBzdWNoIGRpc3Bhcml0aWVzLg0KDQoNCjxicj48YnI+PGJyPg0KDQoNCiMgNC4gQ2FzaCByZXNwb25zZSBhY3RvcnMgYW5kIGNhc2ggZGlzYnVyc2VkDQoNCkluIHRoZSBzY2F0dGVycGxvdCBiZWxvdywgZWFjaCBwb2ludCBpcyBhIHNpbmdsZSBjYXNoIHdvcmtpbmcgZ3JvdXAgcGFydG5lci4gVGhlIHgtYXhpcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBiZW5lZmljaWFyaWVzIHJlYWNoZWQgcGVyIGFnZW5jeSBhbmQgdGhlIHktYXhpcyBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjb21tdW5pdGllcyAoYWRtaW40KSByZWFjaGVkLiANCg0KPGJyPg0KDQpgYGB7ciB0b3RhbHMsIGV2YWwgPSBGQUxTRX0NCg0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBtdXRhdGUodXNkX3RvdGFsID0gZmFtaWxpZXMgKiBxdWFudGl0eSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIHVzZF90b3RhbCA9IHN1bSh1c2RfdG90YWwsIG5hLnJtID0gVFJVRSkpDQoNCmBgYA0KDQoNCg0KYGBge3IgcGFydG5lci1zY2F0dGVyfQ0KcGFydG5lcl9zY2F0dGVyIDwtIGZzbCAlPiUgDQogICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIGdyb3VwX2J5KHBhcnRuZXJfY29kZSwgDQogICAgICAgICAgIGFkbWluMnBjb2RlLCANCiAgICAgICAgICAgYWRtaW40cGNvZGUpICU+JSANCiAgc2xpY2Uod2hpY2gubWF4KGJlbmVmaWNpYXJpZXMpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdyb3VwX2J5KHBhcnRuZXJfY29kZSkgJT4lIA0KICBzdW1tYXJpc2UoYmVuZWZpY2lhcmllcyA9IHN1bShiZW5lZmljaWFyaWVzLCBuYS5ybSA9IFRSVUUpLCANCiAgICAgICAgICAgIGNvbW11bml0aWVzID0gbl9kaXN0aW5jdChhZG1pbjRwY29kZSkpICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gYmVuZWZpY2lhcmllcywgeSA9IGNvbW11bml0aWVzKSkgKw0KICBnZW9tX3BvaW50KGFlcyhzaXplID0gYmVuZWZpY2lhcmllcywgDQogICAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAocGFydG5lcl9jb2RlLCAiXG4iLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVuZWZpY2lhcmllczogIiwgZm9ybWF0KGJlbmVmaWNpYXJpZXMsIGJpZy5tYXJrID0gIiwiKSwgIlxuIiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbW11bml0aWVzOiAiLCBjb21tdW5pdGllcykpKSArIA0KICBzY2FsZV94X2xvZzEwKGxhYmVscyA9IGNvbW1hKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpICsgDQogIGxhYnMoeCA9ICJCZW5lZmljaWFyaWVzIHJlYWNoZWQiLCANCiAgICAgICB5ID0gIkNvbW11bml0aWVzIChhZG1pbjQpIHJlYWNoZWQiLCANCiAgICAgICB0aXRsZSA9ICJJbXBsZW1lbnRpbmcgcGFydG5lcnMgLS0gYmVuZWZpY2lhcmllcyBhbmQgY29tbXVuaXRpZXMgcmVhY2hlZCIpDQoNCmdncGxvdGx5KHBhcnRuZXJfc2NhdHRlciwgdG9vbHRpcCA9IGMoInRleHQiKSkgJT4lIA0KICBsYXlvdXQoc2hvd2xlZ2VuZCA9IFRSVUUsIGxlZ2VuZCA9IGxpc3QoZm9udCA9IChsaXN0KHNpemUgPSA2KSkpKSAlPiUgDQogIHBsb3RseTo6c3R5bGUoaG92ZXJvbiA9ICJwb2ludCIpICU+JSANCiAgbGF5b3V0KHRpdGxlID0gbGlzdCh0ZXh0ID0gcGFzdGUwKCJCZW5lZmljaWFyaWVzIGFuZCBjb21tdW5pdGllcyByZWFjaGVkIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8YnI+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8c3VwPiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FzaCByZXNwb25zZSBpbXBsZW1lbnRpbmcgcGFydG5lcnMiLCI8L3N1cD4iKSkpDQoNCg0KYGBgDQoNCjxicj4NCg0KVVNEIGByIHBhc3RlKGZvcm1hdChyb3VuZCgoZnNsICU+JSBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgbXV0YXRlKHVzZF90b3RhbCA9IGZhbWlsaWVzICogcXVhbnRpdHkpICU+JSAge3N1bSguJHVzZF90b3RhbCl9KSAvIDEwMDAwMDAsIDEpLCB0cmltID0gVFJVRSksICJtaWxsaW9uIilgIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIGFjcm9zcyBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluNHBjb2RlKX1gIGNvbW11bml0aWVzIGFuZCBgciBmc2wgJT4lIGZpbHRlcihhY3Rpdml0eSA9PSAiQ2FzaCBSZXNwb25zZSIgJiBwbGFubmVkX2ltcGxlbWVudGVkID09ICJJbXBsZW1lbnRlZCIpICU+JSB7bl9kaXN0aW5jdCguJGFkbWluM3Bjb2RlKX1gIHN1Yi1kaXN0cmljdHMgaW4gTlcgU3lyaWEuDQoNCg0KVGhlIHRhYmxlIGJlbG93IHN1bW1hcmlzZXMgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzY2F0dGVycGxvdCBhYm92ZSBpbiB0YWJ1bGFyIGZvcm06DQoNCjxicj4NCg0KDQoNCmBgYHtyfQ0KZnNsICU+JSANCiAgZmlsdGVyKGFjdGl2aXR5ID09ICJDYXNoIFJlc3BvbnNlIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUsIA0KICAgICAgICAgICBhZG1pbjJwY29kZSwgDQogICAgICAgICAgIGFkbWluNHBjb2RlKSAlPiUgDQogIHNsaWNlKHdoaWNoLm1heChiZW5lZmljaWFyaWVzKSkgJT4lIA0KICB1bmdyb3VwKCkgJT4lIA0KICBncm91cF9ieShwYXJ0bmVyX2NvZGUpICU+JSANCiAgc3VtbWFyaXNlKGJlbmVmaWNpYXJpZXMgPSBzdW0oYmVuZWZpY2lhcmllcywgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBkaXN0cmljdHMgPSBuX2Rpc3RpbmN0KGFkbWluMnBjb2RlKSwgDQogICAgICAgICAgICBjb21tdW5pdGllcyA9IG5fZGlzdGluY3QoYWRtaW40cGNvZGUpKSAlPiUgDQogIGFycmFuZ2UoZGVzYyhiZW5lZmljaWFyaWVzKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJSZWFjaCBhbmQgZm9vdHByaW50IG9mIGNhc2ggcmVzcG9uc2UgYWN0b3JzIikgJT4lIA0KICB0aGVtZV96ZWJyYSgpICU+JSANCiAgc2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KSAlPiUgDQogIGZvb3Rub3RlKGFzX3BhcmFncmFwaCgiT25seSBwYXJ0bmVycyB3aG8gcHJvdmlkZWQgbW9yZSB0aGFuIFVTRCAxMDAvZmFtaWx5L21vbnRoIiksIA0KICAgICAgICAgICBpID0gMSwgaiA9IDEsIHBhcnQgPSAiaGVhZGVyIikNCiAgDQpgYGANCg0KDQoNCjxicj48YnI+DQoNCg0KDQojIyA0LjEgVVNEIGRpc2J1cnNlZCBieSBwYXJ0bmVyDQoNClRoZXJlIGlzIHZlcnkgZ29vZCBjb21wbGlhbmNlIHdpdGggQ1dHIHN0YW5kYXJkcyBvbiB0aGUgdHJhbnNmZXIgdmFsdWVzIG9mIG11bHRpcHVycG9zZSBjYXNoIGludGVydmVudGlvbnMsIGFzIGNhbiBiZSBzZWVuIGJ5IHRoZSBgdXNkX3Blcl9mYW1gIGNvbHVtbiBpbiB0aGUgdGFibGUgYmVsb3cuIA0KDQo8YnI+DQoNCg0KYGBge3J9DQpmc2wgJT4lIA0KICBmaWx0ZXIoYWN0aXZpdHkgPT0gIkNhc2ggUmVzcG9uc2UiICYgcGxhbm5lZF9pbXBsZW1lbnRlZCA9PSAiSW1wbGVtZW50ZWQiKSAlPiUgDQogIG11dGF0ZSh1c2RfdG90YWwgPSBmYW1pbGllcyAqIHF1YW50aXR5KSAlPiUgDQogIGdyb3VwX2J5KHBhcnRuZXJfY29kZSkgJT4lIA0KICBzdW1tYXJpc2UodXNkX3RvdGFsID0gc3VtKHVzZF90b3RhbCwgbmEucm0gPSBUUlVFKSwgDQogICAgICAgICAgICBmYW1pbGllcyA9IHN1bShmYW1pbGllcywgbmEucm0gPSBUUlVFKSkgJT4lIA0KICBtdXRhdGUodXNkX3Blcl9mYW0gPSByb3VuZCh1c2RfdG90YWwgLyBmYW1pbGllcywgZGlnaXRzID0gMiksIA0KICAgICAgICAgYCVfdXNkX3RvdGFsYCA9IHJvdW5kKHVzZF90b3RhbCAvIHN1bSh1c2RfdG90YWwpICogMTAwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gMikpICU+JQ0KICBhcnJhbmdlKGRlc2ModXNkX3RvdGFsKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHNldF9jYXB0aW9uKCJVU0QgZGlzYnVyc2VkIGFuZCBmYW1pbGllcyByZWFjaGVkIGJ5IHBhcnRuZXIiKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBmbGV4dGFibGU6OnNldF90YWJsZV9wcm9wZXJ0aWVzKGxheW91dCA9ICJhdXRvZml0Iiwgd2lkdGggPSAuOCkNCmBgYA0KDQoNCjxicj4NCg0KQmVsb3cgaXMgYSBicmVha2Rvd24gb2YgYmVuZWZpY2lhcmllcyBhbmQgZmFtaWxpZXMgcmVhY2hlZCBieSBjYXNoLWJhc2VkIGFjdGl2aXRpZXMgb2YgYWxsIHZhbHVlcywgbm90IGp1c3QgdGhvc2UgdGhhdCBxdWFsaWZ5IGFzIE1QQy4gDQoNCjxicj4NCg0KYGBge3J9DQpmc2wgJT4lIA0KICBmaWx0ZXIodW5pdCA9PSAiVVNEIiAmIHBsYW5uZWRfaW1wbGVtZW50ZWQgPT0gIkltcGxlbWVudGVkIikgJT4lIA0KICBncm91cF9ieSh1c2RfdHJhbnNmZXJfdmFsdWUgPSBxdWFudGl0eSkgJT4lIA0KICBzdW1tYXJpc2UoZmFtaWxpZXMgPSBzdW0oZmFtaWxpZXMsIG5hLnJtID0gVFJVRSksDQogICAgICAgICAgICBiZW5lZmljaWFyaWVzID0gc3VtKGJlbmVmaWNpYXJpZXMsIG5hLnJtID0gVFJVRSkpICU+JSANCiAgbXV0YXRlKGAlX2JlbmVmaWNpYXJpZXNgID0gcm91bmQoYmVuZWZpY2lhcmllcyAvIHN1bShiZW5lZmljaWFyaWVzKSAqIDEwMCwgZGlnaXRzID0gMiksIA0KICAgICAgICAgdXNkX3RyYW5zZmVyX3ZhbHVlID0gcGFzdGUwKCIkIiwgdXNkX3RyYW5zZmVyX3ZhbHVlKSkgJT4lIA0KICBmbGV4dGFibGUoKSAlPiUgDQogIHRoZW1lX3plYnJhKCkgJT4lIA0KICBzZXRfY2FwdGlvbigiVVNEIHRyYW5zZmVyIHZhbHVlcyBmb3IgYWxsIGNhc2gtYmFzZWQgYWN0aXZpdGllcywgbm90IGp1c3QgTVBDIikgJT4lIA0KICBmb290bm90ZShpID0gMSwgaiA9IDMsIHBhcnQgPSAiaGVhZGVyIiwgDQogICAgICAgICAgIGFzX3BhcmFncmFwaCgiRGF0YSBmcm9tIHRoZSBGU0wgdHJhY2tlciwgYWxsIGNhc2ggcmVzcG9uc2UgYWN0aXZpdGllcyByZXBvcnRlZCIpKSAlPiUgDQogIGZsZXh0YWJsZTo6c2V0X3RhYmxlX3Byb3BlcnRpZXMobGF5b3V0ID0gImF1dG9maXQiLCB3aWR0aCA9IC44KQ0KYGBgDQoNCg0KPGJyPjxicj48YnI+DQoNCg0KIyA1LiBDQ0NNIHNpdGUgdHJhY2tlciAtLSBzZWFyY2hhYmxlIHRhYmxlDQoNCjxicj4NCg0KRGF0YSBmcm9tIFtDQ0NNIHNpdGUgdHJhY2tlcl0oaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMUREQnZJVGRnNW40ZUMtbDNtNldFYUxFNzI5MGV6OWhNL2VkaXQjZ2lkPTU1NDgwMTk5OSkuIEV4dHJhY3RlZCAxNSBNYXJjaCAyMDIzLiANCg0KPGJyPg0KDQpgYGB7ciBkdH0NCnNpdGVzICU+JSANCiAgc2VsZWN0KGdvdmVybm9yYXRlLCANCiAgICAgICAgIGRpc3RyaWN0LCANCiAgICAgICAgIHN1Yl9kaXN0cmljdCwgDQogICAgICAgICBjb21tdW5pdHksIA0KICAgICAgICAgc2l0ZV9uYW1lLCANCiAgICAgICAgIGxvbmdpdHVkZV94LA0KICAgICAgICAgbGF0aXR1ZGVfeSwgDQogICAgICAgICBmYW1pbGllcywgDQogICAgICAgICBpbmRpdmlkdWFscywgDQogICAgICAgICBmb2NhbF9wb2ludCA9IG9yZ2FuaXphdGlvbl9uYW1lLCANCiAgICAgICAgIGZvY2FsX2NvbnRhY3QgPSBwaG9uZSwgDQogICAgICAgICBwY29kZSA9IHRlbXBfY29kZSkgJT4lIA0KICBkYXRhdGFibGUob3B0aW9ucyA9IGxpc3QocGFnZUxlbmd0aCA9IDEwLCBzY3JvbGxYID0gVFJVRSksIA0KICAgICAgICAgICAgZmlsdGVyID0gbGlzdChwb3NpdGlvbiA9ICJ0b3AiLCBjbGVhciA9IEZBTFNFKSwNCiAgICAgICAgICAgIGNhcHRpb24gPSBodG1sdG9vbHM6OnRhZ3MkY2FwdGlvbihzdHlsZSA9ICdjYXB0aW9uLXNpZGU6IHRvcDsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtc2l6ZToxMjAlIDsnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSB0YWJsZSAtLSBDb2xsZWN0aXZlIHNpdGVzLCBsaXN0IG1haW50YWluZWQgYnkgQ0NDTSIpKSAlPiUgDQogIGZvcm1hdFN0eWxlKDAsIHRhcmdldCA9ICJyb3ciLCBsaW5lSGVpZ2h0ID0gIjgwJSIsIGZvbnRTaXplID0gIjgwJSIpDQogIA0KYGBgDQoNCg0KDQoNCg0K